跳到主要内容

Go 的 testify 和 mockery 库

TODO: ....

看别人的项目发现有行注释 Goland 显示可以运行,遂查询用法,发现 testifymockery 这两个库

这两个库的目的都是一致的,简化单元测试,所以拿来一起学习

testify 库

Goland 官方的支持 使用Testify工具包

mockery 库

mockery,Golang 的一种用于模拟实例的自动生成工具。GitHub 资源页 下载后设置 PATH 路径(或者直接丢到 GOROOT 路径里面去)

首先添加依赖

go get github.com/vektra/mockery/v2/.../

生成 Mock 文件

创建一个简单的接口

package test

type Stringer interface {
String() string
}

第一种方式:命令

到文件路径运行

mockery --name=Stringer 

然后就能看到输出了

可以看到生成的文件

package mocks

import mock "github.com/stretchr/testify/mock"

// Stringer is an autogenerated mock type for the Stringer type
type Stringer struct {
mock.Mock
}

// String provides a mock function with given fields:
func (_m *Stringer) String() string {
ret := _m.Called()

var r0 string
if rf, ok := ret.Get(0).(func() string); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(string)
}

return r0
}

第二种方式:直接在这个接口上面写注释

//go:generate mockery --name Stringer --filename stringer_mock.go

点击后也会生成 stringer_mock.go 文件

在执行 go generate 时,指令 //go:generate mockery -name=Client 被触发。它本质上是 mockery -name=Client 的快捷方式,优势是 go generate 可以批量执行多个目录下的多个指令

Reference

mockery README 使用testify和mockery库简化单元测试